import AnimatedObject from '../base/animated_object';
import DamageText from '../base/damage_text';
import OneShotAnimation from '../base/one_shot_animation';

/**
 * 僵尸类
 * 继承自AnimatedObject，实现自动向左移动功能
 */
export default class Zombie extends AnimatedObject {
  isHit = false; // 是否正在受击
  hitTimer = 0; // 受击效果持续时间计时器
  hitDuration = 10; // 受击效果持续帧数
  isTemporaryDirection = false; // 是否处于临时方向状态
  temporaryDirectionX = 0; // 临时X方向向量
  temporaryDirectionY = 0; // 临时Y方向向量
  temporaryDirectionTimer = 0; // 临时方向持续帧数
  /**
   * 构造函数
   * @param {string} imgPrefix - 图片路径前缀
   * @param {number} frameCount - 动画帧数
   * @param {number} width - 宽度
   * @param {number} height - 高度
   * @param {number} speed - 移动速度
   * @param {number} maxY - 最大Y坐标（用于随机位置）
   */
  constructor(imgPrefix, frameCount, width, height, frameInterval = 1, speed = 1, maxY = canvas.height, health = 200) {
    // 初始位置在屏幕最右侧，x坐标设为屏幕宽度，y坐标随机
    const x = canvas.width; // 使用屏幕宽度
    const y = Math.random() * maxY;
    
    super(imgPrefix, frameCount, width, height, frameInterval, x, y);
    
    this.speed = speed; // 移动速度
    this.isDead = false; // 是否死亡
    this.health = health; // 生命值
    // 方向向量，默认为向左移动
    this.directionX = -1;
    this.directionY = 0;
  }
  
  /**
   * 初始化方法
   * 用于对象池复用
   */
  init(imgPrefix, frameCount, width, height, frameInterval = 1, speed = 1, maxY = canvas.height, health = 200) {
    this.imgPrefix = imgPrefix;
    this.frameCount = frameCount;
    this.width = width;
    this.height = height;
    this.frameInterval = frameInterval;
    this.speed = speed;
    this.isDead = false;
    this.visible = true;
    this.isActive = true;
    this.x = canvas.width;
    this.y = Math.random() * maxY;
    this.currentFrame = 0;
    this.frameCounter = 0;
    this.health = health; // 初始化生命值
    // 重置方向向量为向左移动
    this.directionX = -1;
    this.directionY = 0;

    this.updateImage(); // 调用updateImage方法更新图片
    return this;
  }

  /**
   * 更新方法
   * 重写父类update方法，添加移动逻辑和临时方向恢复
   */
  update() {
    super.update(); // 调用父类update方法更新动画帧
    
    // 处理受击效果
    if (this.isHit) {
      this.hitTimer--;
      if (this.hitTimer <= 0) {
        this.isHit = false;
      }
    }
    
    // 处理临时方向状态
    if (this.isTemporaryDirection) {
      this.temporaryDirectionTimer--;
      if (this.temporaryDirectionTimer <= 0) {
        this.isTemporaryDirection = false;
        // 恢复向左的原始方向
        this.directionX = -1;
        this.directionY = 0;
      } else {
        // 使用临时方向
        this.directionX = this.temporaryDirectionX;
        this.directionY = this.temporaryDirectionY;
      }
    }
    
    // 使用方向向量控制移动
    this.x += this.speed * this.directionX;
    this.y += this.speed * this.directionY;
    
    // 检查是否超出屏幕左侧
    if (this.x + this.width < 0) {
      this.destroy();
    }
  }
  
  /**
   * 临时改变僵尸运动方向
   * @param {number} dx - X方向向量
   * @param {number} dy - Y方向向量
   * @param {number} duration - 持续帧数
   */
  setTemporaryDirection(dx, dy, duration) {
    this.isTemporaryDirection = true;
    this.temporaryDirectionX = dx;
    this.temporaryDirectionY = dy;
    this.temporaryDirectionTimer = duration;
  }
  
  
  /**
   * 受击函数
   * @param {number} damage - 受到的伤害值
   */
  takeDamage(damage) {
    this.health -= damage;
    // 创建伤害文本
    const textX = this.x + this.width / 2;
    const textY = this.y - 10;
    DamageText.create(damage, textX, textY);
    this.isHit = true;
    this.hitTimer = this.hitDuration;
    if (this.health <= 0) {
      this.destroy();
    }
  }

  /**
   * 销毁僵尸
   */
  /**
   * 重写render方法，添加受击效果
   */
  render(ctx) {
    super.render(ctx);
    
    // 如果正在受击，绘制半透明红色叠加层
    if (this.isHit) {
    
    }
  }

  /**
   * 销毁僵尸
   */
  destroy() {
    this.isDead = true;
    this.visible = false;
    this.isActive = false;

    // 创建死亡特效
    OneShotAnimation.create('images/tx/ff', 9, this.width, this.height, this.x, this.y);
  }
}